// v 是 Convex 提供的用于验证数据类型的模块，用于定义表字段的数据类型
import { v } from "convex/values";
// defineSchema 和 defineTable 是 Convex 用来定义数据库架构和表结构的方法
import { defineSchema, defineTable } from "convex/server";

export default defineSchema({
  // 定义了一个名为 boards 的表
  boards: defineTable({
    title: v.string(),
    orgId: v.string(),
    authorId: v.string(),
    authorName: v.string(),
    imageUrl: v.string(),
  })
    // 定义了一个基于 orgId 的索引，允许根据 orgId 快速查询所有相关的 boards
    .index("by_org", ["orgId"])
    // 通过 searchIndex，可以在 title 字段中进行全文搜索，同时可以用 orgId 进行过滤
    .searchIndex("search_title", {
      searchField: "title", // 表示在 title 字段中进行全文搜索
      filterFields: ["orgId"], // 表示搜索时可以通过 orgId 进行过滤
    }),

  // 用户收藏数据表
  userFavorites: defineTable({
    orgId: v.string(),
    userId: v.string(),
    boardId: v.id("boards"),
  })
    .index("by_board", ["boardId"]) // 这个索引允许根据 boardId 查询哪些用户收藏了特定的 board
    .index("by_user_org", ["userId", "orgId"]) // 这个索引允许根据 userId 和 orgId 查询用户在某个组织下收藏的所有 board。
    .index("by_user_board", ["userId", "boardId"]) // 这个索引允许快速查询某个用户是否收藏了某个 board。
    .index("by_user_board_org", ["userId", "boardId", "orgId"]), // 这个索引允许通过 userId、boardId 和 orgId 组合来进行查询，提供了更加精细的查询控制。
});
